var read_line = require('readline-sync')
read_line.setDefaultOptions({ prompt: '' })
var read_line = read_line.prompt
let [n, m, k] = read_line().split(' ').map((item) => parseInt(item)) // 读取三个整数
let arrU = read_line().split(' ').map((item) => parseInt(item)) // 路径的一个端点
let arrV = read_line().split(' ').map((item) => parseInt(item)) // 路径的另一个端点
let arrW = read_line().split(' ').map((item) => parseInt(item)) // 路径的花费
let map = new Map() // 构件一个map结构
for (let i = 0; i < m; i++) {
  let from = arrU[i]
  let to = arrV[i]
  let cost = arrW[i]
  if (!map.get(from)) {
    map.set(from, [[to, cost]]) // 设置成key是起点 value 是[[终点,花费],[终点,花费]]
  } else {
    let arr = map.get(from)
    arr.push([to, cost])
    map.set(from, arr)
  }

}
let x = 0
x = dfs(1, 0, k)
function dfs (start, cost, k) { // 起始的位置start 当前走了多少步step 最小花费cost 剩下的k
  let toArr = map.get(start) // 找到他鞥走到哪
  let minCost = Infinity
  for (let i = 0; i < toArr.length; i++) {
    if (toArr[i][0] === n) {
      minCost = toArr[i][1] // 花费去这个最大的
    } else {
      // 如果没找到 
      k-- // 剩下的步数--
      cost = Math.max(cost, toArr[i][1]) // 花费去这个最大的
      if (k === 0 && toArr[i][0] !== 5) {
        return // 如果没有k了就return出去退出本次循环
      }
      // 如果还有的话
      cost = dfs(toArr[i][0], cost, k)
    }
  }
  return Math.min(minCost, cost)
}
console.log(x)